home *** CD-ROM | disk | FTP | other *** search
/ MacWorld Secrets (4th Edition) / Mac Secrets CD 4th Ed.toast / Shareware & Freeware / KeyQuencer 1.2.2 / Developer’s toolkit / Sample extension code / Action.c next >
Text File  |  1995-12-16  |  3KB  |  81 lines

  1. //==============================================================================
  2. // KEYQUENCER EXTENSIONS SAMPLE - VERSION 1.2.2 - DECEMBER 1995
  3. // By Alessandro Levi Montalcini <alm@torino.alpcom.it>
  4. // ©1995-96 Binary Software, Inc. <binarysoft@eworld.com>
  5. // Don’t forget to send us any cool extensions you create!
  6. // This text looks best in monaco 9 font, 4 spaces per tab, no wrapping
  7. // DOCUMENTATION IS AVAILABLE IN THE EXTENSION.H AND ACTION.H HEADERS
  8. //==============================================================================
  9.  
  10. #include "Extension.h"
  11. #include "Action.h"
  12.  
  13. Handle    gTextResource;
  14.  
  15. //==============================================================================
  16. // THIS ROUTINE IS CALLED WHEN THE EXTENSION IS INVOKED BY A MACRO
  17.  
  18. short run(ParamsPtr params, MachineHandle mac, GluePtr glue)
  19. {
  20.     // This is where the extension does its work
  21.     // cur heap zone = active app heap, cur res file = unknown
  22.     // the extension file is closed, resources are not available
  23.     
  24.     StringPtr    string;
  25.     long        length;
  26.     short        index;
  27.     Str255        message;
  28.     
  29.     message[0] = 0;                                                        // clear message string
  30.     for(index=0; index<params->paramsCount; ++index)                    // scan all params
  31.     {
  32.         string = params->parameter[index];                                // get nth parameter
  33.         if(string[1]=='"' && string[0]>2)                                // check for quotes
  34.         {
  35.             if(message[0]>0) return kTellTooManyParams;                    // we only accept one parameter
  36.             BlockMoveData(&string[2], &message[1], (long)string[0]-2);    // copy text, strip quotes
  37.             message[0] = string[0]-2;
  38.         }
  39.         else if(EqualString("\pLOADED", string, false, true))            // check for "loaded" keyword
  40.         {
  41.             if(message[0]>0) return kTellTooManyParams;                    // again, no more than 1 param
  42.             if(gTextResource==0L)                                        // 'TEXT' 128 not found
  43.             {
  44.                 (*glue->DisplayMessage)("\ptext resource not found at startup.", true);
  45.                 return kExtGenericError;
  46.             }
  47.             length = GetHandleSize(gTextResource);                        // get text length
  48.             if(length>255) length = 255;                                // max length of our string
  49.             BlockMoveData(*gTextResource, &message[1], length);            // copy to message string
  50.             message[0] = (unsigned char)length;
  51.         }
  52.         else return kTellUnknownKeyword;                                // unknown keyword found
  53.     }
  54.     if(message[0]==0) return kTellNotEnoughParams;                        // didn't find required parameter
  55.     
  56.     (*glue->DisplayMessage)(message, false);                            // display our message
  57.     return kExtNoError;                                                    // we're done
  58. }
  59.  
  60. //==============================================================================
  61. // THIS ROUTINE IS CALLED ONCE AT STARTUP TIME
  62.  
  63. short init(ParamsPtr params, MachineHandle mac, GluePtr glue)
  64. {
  65.     // This is only called once at startup time
  66.     // cur heap zone = sys heap, cur res file = extension res file
  67.     // you may load (and detach) resources and initialize your data
  68.     // glue is only available in recent versions, check for nil glue
  69.     
  70.     gTextResource = Get1Resource('TEXT', 128);                            // load resource
  71.     if(gTextResource)
  72.     {
  73.         HNoPurge(gTextResource);                                        // make it unpurgeable
  74.         DetachResource(gTextResource);                                    // res file will be closed soon
  75.     }
  76.     if(glue) (*glue->ShowStartupIcon)(128);                                // show our own icon (no glue was available in KQ 1.0)
  77.     return kExtNoError;                                                    // everything OK
  78. }
  79.  
  80. //==============================================================================
  81.